// 题目要求：
// 给定 n 个互不相同的正整数，每个正整数都有素因子，要求找出所有正整数素因子的最小和
// 1 <= n <= 10, 2 <= a[i] <= 1000

// 解题思路：
// 注意到题目给定的 n 的范围很小，因此考虑用暴搜的方法
// 找到每个整数的素因子，可以用一个整数数组存放
// 先跳出第一个整数的素因子，再找第二个整数的素因子，依次类推，直到找到每一个数的素因子
// 对素因子求和，找到最小和

// 找每个整数的某一个素因子，从素因子数组中挑选，因子需要画一棵决策树
// 画决策树的问题可以使用 dfs 来实现，dfs 的优点是只需要考虑某一层即可


import java.util.*;



public class MinSumOfPrimeFactor {
    public static List<List<Integer>> list = new ArrayList<>();
    public static int n = 0;
    public static int sum = 0;
    public static int min = Integer.MAX_VALUE;
    public static boolean[] check = new boolean[1010];

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);

        n = in.nextInt();

        for(int i = 0; i < n; i++){
            int t = in.nextInt();
            list.add(getPrimeFactor(t));
        }

        dfs(0);

        System.out.println(min == Integer.MAX_VALUE ? -1 : min);
    }

    public static void dfs(int pos){
        if(pos == n){
            min = Math.min(min, sum);
            return;
        }
        for(int x : list.get(pos)){
            if(!check[x]){
                sum += x;
                check[x] = true;
                dfs(pos + 1);
                sum -= x;
                check[x] = false;
            }
        }
    }


    public static List<Integer> getPrimeFactor(int m){
        List<Integer> ret = new ArrayList<>();
        for(int i = 2; i <= m; i++){
            if(m % i == 0){
                if(isPrime(i)){
                    ret.add(i);
                }
            }
        }
        return ret;
    }

    // 判断是否为素数
    public static boolean isPrime(int m){
        if(m < 2) return false;
        for(int i = 2; i <= Math.sqrt(m); i++){
            if(m % i == 0) return false;
        }
        return true;
    }
}
